﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace HospitalAdmision
{
    public partial class formFarmacia : Form
    {

        public formFarmacia()
        {
            InitializeComponent();
        }
        public static ProyHospitalEntities Hos = new ProyHospitalEntities();//crear objeto db
        public static String rutf;//variable q almacena rut
        public static Boolean busca = false;//saber si buscó al paciente

        private void RegistrarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            registro regf = new registro();//objeto tipo formulario regf
            regf.ShowDialog();//mostrar formulario regf
        }
        private void btn_verFicha_Click(object sender, EventArgs e)
        {
            rutf = Convert.ToString(tb_rut.Text);//guardar rut en variable
            
            Paciente paci = Hos.Paciente.FirstOrDefault(p => p.rut == rutf);//preguntar si existe paciente
            Cama cama = Hos.Cama.SingleOrDefault(c=> c.FK_rut==rutf);
            if (paci != null)//si existe, llenar los campos del formulario con los datos asociados al paciente
            {
                busca = true;//si buscó

                tb_nombre.Text = paci.nombres;
                tb_apellido.Text = paci.apePaterno+" "+paci.apeMaterno;
                tb_edad.Text = Convert.ToString(paci.edad);
                tb_contraindicaciones.Text = paci.contraindicaciones;
                tb_fechaIngreso.Text = Convert.ToString(cama.fechaOcupacion);
                tb_postal.Text = paci.direccionPostal;
                tb_sexo.Text = Convert.ToString(paci.sexo);

                //prescripcion, ver si paciente tiene prescripciones medicas
                PrescripcionMedica presc = Hos.PrescripcionMedica.FirstOrDefault(pr => pr.FK_rut == rutf && pr.estado != "entregada");
                //obtener numero de cama asignado al paciente
                Cama cam = Hos.Cama.Single(c => c.FK_rut == rutf);
                tb_cama.Text = Convert.ToString(cam.id_cama);
                //obtener unidad funcional asignada al paciente
                UnidadFuncional uf = Hos.UnidadFuncional.Single(u => u.id_uFuncional == cam.unidadFuncional);
                tb_UF.Text = uf.Descripcion;
                //si no existe prescripcion medica, enviar mensaje
                if (presc == null)
                {
                    MessageBox.Show("no hay nuevas prescripciones para éste paciente");
                }
                else//de lo contrario rellenar los textbox con los datos encontrados
                {
                    tb_medicamento.Text = presc.descripcionMedicamento;
                    tb_dosis.Text = Convert.ToString(presc.dosis);
                    tb_fechaPresc.Text = Convert.ToString(presc.fechaPrescripcion);
                    tb_MotivoRechazo.Text = presc.motivoRechazo;//si fue rechazada anteriormente el motivo aparecerá aquí
                }
            }
            else
            {
                //si no se encontró nada enviar mensaje 
                MessageBox.Show("el paciente no existe");
            }
        }
        //boton rechazar
        private void Button3_Click(object sender, EventArgs e)
        {
            //buscar si existe prescripcion medica pendiente para este paciente
            PrescripcionMedica presc = Hos.PrescripcionMedica.FirstOrDefault(pr => pr.FK_rut == rutf && pr.estado != "entregada");
            if (busca != false && presc!=null)//si ya buscó y encontró se muestra el formulario d rechazo
            {
                rechazo rechf = new rechazo();//crea objeto formulario
                rechf.ShowDialog();//muestra formulario de rechazo
            }
            else//de lo contrario se muestra mensaje
            {
                MessageBox.Show("antes debe seleccionar un paciente con prescripcion medica");
            }
        }
        private void Button4_Click(object sender, EventArgs e)
        {
            limpiar();//metodo limpia textbox
        }
        int idUs=0;
        private void Button2_Click(object sender, EventArgs e)
        {
            if (busca != false)
            {
                //si no tiene prescripcion no se puede entregar
                if (tb_medicamento.Text == "" || tb_dosis.Text == "")
                {
                    MessageBox.Show("no existe prescripcion medica");
                }
                else
                {
                    //selpres = seleleccionar prescripcion
                    var selpres = from pr in Hos.PrescripcionMedica
                                  where pr.FK_rut == formFarmacia.rutf
                                  select pr;

                    Producto pro = Hos.Producto.FirstOrDefault(p => p.descripcion == tb_medicamento.Text);
                    //avisar q no quedan medicamentos
                    if (pro.cantidad - Convert.ToInt32(tb_dosis.Text) < 0)
                    {
                        MessageBox.Show("no hay medicamentos suficientes");
                    }
                    else
                    {
                        pro.cantidad -= Convert.ToInt32(tb_dosis.Text);//descontar medicamento
                        foreach (PrescripcionMedica camestado in selpres)//cambiar estado prescripcion
                        {
                            camestado.estado = "entregada";
                            camestado.motivoRechazo = "";
                        }
                        Hos.SaveChanges();

                        var regsal = from rs in Hos.Producto//registrar salida de medicamento
                                     where rs.descripcion == tb_medicamento.Text
                                     select rs;
                        //guardar registros en LibroDeRegistro
                        LibroRegistro LR = new LibroRegistro();
                        foreach (var r in regsal)
                        {
                            LR.descripcion = r.descripcion;
                            LR.cantidadEntregada = Convert.ToInt32(tb_dosis.Text);
                            LR.fechaEntrega = DateTime.Now;
                            LR.FK_producto = r.id_producto;

                            Hos.SaveChanges();
                        }
                        Hos.LibroRegistro.Add(LR);
                        Hos.SaveChanges();
                        //ingresar registros a tabla serviciof
                        Cargos carg = new Cargos();
                        carg.FK_rut = rutf;
                        carg.descripcion = tb_medicamento.Text;
                        carg.monto = Convert.ToInt32(tb_dosis.Text) * pro.PrecioVenta;
                        carg.fecha = DateTime.Now;

                        Hos.Cargos.Add(carg);
                        Hos.SaveChanges();
                        limpiar();
                    }
                }
            }
            else
            {
                MessageBox.Show("debe seleccionar un paciente");
            }
        }
        public void limpiar()
        {
            tb_rut.Text = "";
            tb_nombre.Text = "";
            tb_apellido.Text = "";
            tb_sexo.Text = "";
            tb_edad.Text = "";
            tb_fechaIngreso.Text = "";
            tb_postal.Text = "";
            tb_UF.Text = "";
            tb_fechaPresc.Text = "";
            tb_medicamento.Text = "";
            tb_cama.Text = "";
            tb_dosis.Text = "";
            tb_MotivoRechazo.Text = "";
            busca = false;
        }
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (idUs != 1)
            {
                FormIngreso fi = new FormIngreso();
                fi.Show();
            }
        }
        public void recibeId(int id)
        {
            idUs = id;
        }  
    }
}
